% Busco todas las carpetas que comienzen con test
% Ejecuto el test

function dotests()
	TEST_PATH="../tests";
	files=readdir(TEST_PATH);
	for f=3:rows(files)
		testpath=sprintf("%s/%s",TEST_PATH,files{f});
		if((index(files{f},".") != 1) && isdir(testpath))
			% first condition is for .svn and hidden files
			dotest(testpath);
		endif
	endfor
endfunction

function dotest(directory)

	patterns=getPatterns(directory);

	if(length(patterns)>0)

		printf("ejecutando test: %s ...\n",directory);
		fflush(stdout);
		patt=patterns(1,:);
		w=weightsMatrix(patt);
		processPatterns(w,patterns,directory);

		directory=sprintf("%s/%s",directory,"others" );
		others=getPatterns(directory);

		if(length(others)>0)
			printf("ejecutando patrones 'others'\n");
			processPatterns(w,others,directory);
		endif
	else
		printf("no hay patrones de entrada en %s\n ",directory);
		fflush(stdout);
	endif

endfunction

function processPatterns(w,patterns,directory)

	IMG_ROW=5;	
	img_patt={};
	img_test={};
	r=1;

	% crea filas de a los sumo IMG_ROW imagenes
	% tanto de patrones como de los resultados de los mismos
	% a traves de la red

	for p=1:columns(patterns(1,:))
		if ( r>length(img_patt))
			img_patt{r}=[vecToMatrix(patterns{1,p})];
		else
			img_patt{r}=[img_patt{r},vecToMatrix(patterns{1,p})];
		endif
		otest=output(patterns{1,p},w);
		otest=(otest+1)/2;
		if( r > length(img_test))
			img_test{r}=[vecToMatrix(otest)];
		else
			img_test{r}=[img_test{r},vecToMatrix(otest)];
		endif
		if(mod(p,IMG_ROW)==0)
			r=r+1;
		endif
	endfor


	printf("mergeando imagenes de %s ...\n",directory);
	fflush(stdout);
	img_ans=[];

	% mergea las filas anteriormente creadas, en caso que la fila tenga
	% menos que IMG_ROW completa con unos, es decir completa la imagen
	% en blanco

	for row=1:r
		if (row>1)
			rs=rows(img_patt{row});
			cs=columns(img_ans)-columns(img_patt{row});
			img_patt{row}=[img_patt{row},ones(rs,cs)];
			img_test{row}=[img_test{row},ones(rs,cs)];
		endif
		img_ans=[img_ans;img_patt{row}];
		img_ans=[img_ans;img_test{row}];
	endfor		
	
	% graba la matriz de imagenes de salida 

	anspath=sprintf("%s/%s",directory,"t_ans.png");
	imwrite(img_ans,anspath);

endfunction


function matrix=vecToMatrix(pattern)
	IMG_WIDTH=64;
	for i=1:IMG_WIDTH:columns(pattern);
		matrix(floor(i/IMG_WIDTH)+1,:)=pattern(i:i+IMG_WIDTH-1);
	endfor
endfunction
